// Copyright 2009, Lucid Technics, LLC.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in
// writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

importClass(Packages.org.apache.commons.io.output.LockableFileWriter);
importClass(Packages.java.io.File);
importClass(Packages.java.lang.Runtime);

var r = Runtime.getRuntime(),
    proc,
    command,
    passwordFile, 
    fileWriter,
    passwordFileName = SERVLET.getServletConfig().getInitParameter("rr.password.file");

var [user, errorMap] = h.populate();

if (errorMap.isEmpty() === true)
{
	try {
		passwordFile = new File(passwordFileName);
		fileWriter = LockableFileWriter(passwordFile, true);

		command = passwordFileName + " " + user.name + " " + user.password;

		if(passwordFile.exists() === true) {
			proc = r.exec("htpasswd -mb " + command);
		} else {
			proc = r.exec("htpasswd -cb " + command);
		}

		if (proc.waitFor() === 0) {
			CONTENT_CONTEXT.content = h.msg201(PATH + "/" + user.name);
		} else {
			LOG.error("Unable to execute htpasswd. Returned code: " + returnCode);
			CONTENT_CONTEXT.content = h.msg500();
		}

	}catch (e){
		LOG.error("Encountered exception:" + e + " while trying to create user.");
		CONTENT_CONTEXT.content = h.msg500();
	} finally {
		try { fileWriter.close(); } catch(e) { LOG.warn("Error encountered while trying to close password file"); }    
	}
}
else
{
	CONTENT_CONTEXT.content = msg401(errorMap);
}